AWS VPC
VPCの用語説明
VPC (Virtual Private Cloud)
VPCはAWS上の仮想的なネットワーク空間.
仮想であるがゆえに、物理的な配線作業やハードウェア追加をする必要がない.
設定だけで簡単にインスタンスを NW 接続したり、サブネットを増やしたり、仮想ロードバランサを増やしたりできる.
以下,VPCの各要素を説明していく
https://gyazo.com/a26bc756c80fa3ba668e4b000938b249
https://gyazo.com/de53599976d006e046af796ea8e18abd
アベイラビリティゾーン(AZ)
リージョンの中のデータセンター群
1つのリージョン内に2つ以上用意されており,地理的に離れた場所にある
複数のAZにサービスを置いておくことで,災害時にも対応が可能になる.
例えば,ap-northeast-1リージョンならap-northeast-1a, c, dの3つのAZが用意されている.
サブネット
1つのネットワークを分割して作った小さなネットワーク.
基本的にVPCを使うときにはVPCネットワーク内にこのサブネットを構成する.
サブネットごとにインターネット接続設定やオンプレミス環境からの接続を設定できる.
サブネットは下記で説明するCIDR方式で作成する.
サブネットはAZが違えば別のものになるので,それぞれのAZで構成する必要がある.
EC2インスタンスはサブネット内に配置する.
CIDR (Classless Inner Domain Routing,サイダー)
クラスを使わないIPアドレスの割り当てと、経路情報の集成を行う技術.
クラス:IPアドレスのネットワーク部とホスト部を決められたブロック単位 で区切る方法.
簡単だがアドレス空間の利用に無駄が生じる
CIDR:クラスを使わず任意のブロック単位で区切る方法
IPアドレス空間を効率的に利用できる.
VPCを作成したり,サブネットを決めるとき,AWSではこのCIDRを指定する.
https://gyazo.com/ac486ef661bcbbd720078424ee244aa1
例1: 10.1.0.0/23 => 3ブロック目は1になれない.サブネットアドレスのホスト部は全て0である必要がある.
例2: 10.1.1.0/27
ルートテーブル
サブネットごとの「どこに接続できるか」の設定.
テーブルの中身は10.1.0.0/20 Target=hogeのように,サブネット内がアクセスするアドレス Target=送り先と指定する.
サブネット間の通信は「local」ルータ経由ですべて許可する(Target=local)がデフォルトで設定されている.
一般的なネットワーキングのルーティングでは,各NW機器にルートテーブルを持つ.
しかしAWS のルートテーブルは特殊で、ルートテーブルを作成して,それをサブネットに紐付ける.
AWSのサブネットのネットワークでは,利用可能IPアドレスレンジのうち最初の4つと最後の1つは予約されている.
10.1.1.0/24:サブネットそのものを表すアドレス
10.1.1.3/24:将来拡張用(現時点では用途無し)
10.1.1.4/24〜10.1.1.254/24:EC2インスタンスなどで使える
10.1.1.255/24:ブロードキャスト用
https://gyazo.com/ab00d787ac7264fdba8d91c1d8efbc74
DHCPオプションセット
DHCPはサブネットマスク,DGW,DNS,動的IP割り当てなどを自動で行う仕組み. それらは,AWSが用意したDHCPオプションセットという設定集に基づいて自動で設定される.
このDHCPの仕組みはDGWサーバが兼務している.
基本的には動的にIPが払い出されるが,Elastic IPを設定することで固定化できる.
DHCPオプションセットは作成後の設定変更はできず,作成するときにドメイン名,DNS,NTPサーバ,NetBIOSなどを設定する
セキュリティグループ
インスタンス単位での「どこがどこに通信できるか」の設定
ルートテーブルと違って「ここからここへは通信NG」という,より細かな通信制御が可能.
HTTP, HTTPS, SSHなどのためのポートを解放するのに使うアレ.従ってホワイトリスト方式でアクセス制御を行う.
ネットワークACL (Access Control List)
セキュリティグループは「行きの通信」のみの通信制御をするのに対し,こちらは「往復の通信」を制御する.
以下の図では,赤枠がセキュリティグループによる制御が働く部分で,青枠はNW ACLによる制御が働く部分を表している.
https://gyazo.com/5f13e3d2674c6735cf57d64c76a84aed
table: ネットワークACLとセキュリティグループの違い
ネットワークACL セキュリティグループ
主な機能 サブネット間を跨ぐ通信のアクセス制御 サーバ(EC2等)との通信のアクセス制御
State ステートレス(通信の復路も検査) ステートフル(通信の復路は動的に許可)
ルール 許可・拒否のどちらかを指定可能 許可ルールのみを指定可能
方向 in と out で個別にルール設定可 in と out で個別にルール設定可
ネットワークACLとセキュリティグループには優先度はなく,両方が許可されていなければ通信できない.
syslog (UDP), SNMP trap, netflow/sflow 等のプロトコルでは復路がないため,設定を考慮する必要はない.
インターネットGateway (NAT: Network Address Translationオブジェクトの一つ)
VPC内のパブリックサブネットからインターネットに接続するためのゲートウェイで,VPCに設置する.
インターネットGatewayは「インスタンス ↔︎ インターネット」の双方向通信が必要なときに使用する.
逆説的だが,パブリックサブネットとはデフォルトルート(出口)がインターネットGatewayだとルートテーブルで決められたサブネットのこと.双方向通信を行いたいEC2インスタンスはこのパブリックサブネット上で立ち上げる必要がある.
パブリックサブネット上のインスタンスのプライベートIPとパブリックIP(グローバルIP)を1対1変換する役割を持つ.
https://gyazo.com/1641a35b48c3388f018139ad30863bc3
0.0.0.0/0 Target=igwとルートテーブルで設定する.
NAT Gateway
VPC内のプライベートサブネットからインターネットに接続するためのゲートウェイで,パブリックサブネットに設置する.
NAT Gatewayは「インスタンス → インターネット」の片方向通信が必要なときに使用する.
プライベートサブネットはデフォルトルートがインターネット Gatewayでないサブネットなので,基本的に外部接続はしない.
そこでプライベートサブネット -> NAT Gateway -> インターネットGatewayと接続することでインターネットに接続する.
プライベートサブネット上のインスタンスのプライベートIP+TCP/UDPポート番号とパブリックIPを多対1変換する役割を持つ.
このポート番号を使った変換は,インスタンス→インターネットの通信があったときに動的に行われる (NAPT)
https://gyazo.com/fee80c3f749d1d0e64b42dd606f9cce7
NAT Gatewayはインターネット側からアクセスがあってもポート番号がないため変換されず,通信もできない.
そのためインスタンスをインターネットから守れるというメリットがある.要は家庭用ルータと同様の役割.
0.0.0.0/0 Target=nat-gwとルートテーブルで設定する.
ここまでの話からルートテーブルの構成図をまとめると次のようになる
https://gyazo.com/6ba7a418fc31e44b623674b5c90acf9e
(VPC/Interface) エンドポイント
VPC内のサブネットからS3やRDSといったAWSサービスを使うためのアクセスポイント
インターネットを通さず各種AWSサービスにインスタンスを接続させられる.
ロードバランサ
ロードバランサは外部からのアクセスを複数のサーバに均等に分散するためのモジュール. AWSのロードバランサはElastic Load Balancer (ELB)と呼ばれている.
ELBには3種類ある
Application Load Balancer (ALB : http, httpsのみを扱うがこれらに特化.とりあえずこれを使う.)
Network Load Balancer (NLB : TCPレイヤをサポートするが,クッキーセッションなどをサポートしない等使い勝手が微妙)
Classic Load Balancer (CLB : 旧世代ロードバランス)
なお,ロードバランサ自体にもセキュリティグループを設定する必要がある.
また,サーバ側のアクセスログがクライアントIPではなくロードバランサのものになってしまうので,何らかの対策が必要
以下はほぼほぼtoB用なのでしばらくは考えなくて良さそう.
Virtual Private (Network) Gateway
VPC内からオンプレミス環境に接続するためのゲートウェイ.
自社拠点やデータセンターに接続するときにはこちらを使う.
こちらはプライベートIPのままオンプレミス環境へ接続することが可能
AWS Direct Connect
オフィスやデータセンターからAWSまでインターネットを経由しないプライベートな接続を実現できるサービス.
これを導入すると回線状況の影響を受けないため速度が安定し,SSHやHTTPSよりも安全な通信が可能.
これには,ローカルゾーンというものを有効化して使うらしい.
AWS 指定のデータセンター内で AWS ユーザーが『回線敷設、AWS機器へのEthernet接続』といった物理的な作業が必要.
AWSでVPCを構成し,EC2サーバを立ててみる
VPCを一から作成し,その上にMySQL+Apache+PHPのシステムを構築,LBを確認できたら全部削除するところまで
ここでは,PHP+ApacheのサーバとMySQLのサーバに分け,さらにそのシステムを2つのAZに冗長に配置する.
複数のAZの複数のDBサーバを同期する方法はどうもかなりめんどくさいらしいのでここでは触れない. ECS Full Access権限などではVPCを作れない.VPC作成権限を持ったIAMユーザを作成するか,ルートユーザで作業する.
リージョンは「ap-northeast1」を選択しているとする.
なるべく省IPなVPCを構成してみる.
VPCを作成する
VPC用のCIDRを一つだけ設定することでVPCを作成でき,その中でサブネットを作成する.
例:VPCのCIDRが10.1.0.0/20のとき
/24 のサブネットを作る
21bit目〜24bit目の4bitがサブネット用になる
10.1.X.0/24 (X = 0~15)」の16個のパターンのサブネットを作れる
/23 のサブネットを作る
21bit目〜23bit目の3bitがサブネット用になる
「10.1.2Y.0/23 (Y = 0~7)」の8個のパターンのサブネットを作れる
なお,CIDR およびサブネットに適用可能なサブネットマスク長は /16 ~ /28
AWSでの操作
マネジメントコンソール -> VPCサービスのページへ -> VPC -> VPCの作成
名前タグ:ec2-test
IPv4 CIDRブロック:10.0.0.0/26
=> サブネットマスクは/28までなので,作成できるサブネットは最大4個
作成
ルートテーブル,DHCPオプションセット,セキュリティグループ,ネットワークACLが同時に作成される.
サブネットを作成する
パブリック(Web)/プライベート(DB),AZ:c(メイン)/AZ:d(冗長)の組み合わせで4つのサブネットを作成する.
table: subnets
名前 種類 用途 AZ サブネットIP サブネットIPの4ブロック目
ec2-test1 パブリック Webサーバ c 10.0.0.0/28 00000000
ec2-test2 プライベート DB c 10.0.0.16/28 00010000
ec2-test3 パブリック Webサーバ d 10.0.0.32/28 00100000
ec2-test4 プライベート DB d 10.0.0.48/28 00110000
AWSでの操作
VPCサービスのページ -> サブネット -> サブネットの作成
名前タグ:ec2-test1〜4
VPC:ec2-test VPCを選択
AZ:c, d
IPv4 CIDRブロック:上記テーブルのサブネットIPをそれぞれ
作成
上記の各サブネットは,利用可能なIPv4アドレス数が(4bit=16) - 5 = 11個となる.
インターネットGWの作成とVPCへのアタッチ
この作業を行った時点では,まだパブリックサブネットとして設計したサブネットはインターネット接続できない.
次の「ルートテーブルの作成とサブネットへの関連付け」が必要.
AWSでの操作
VPCサービスのページ -> インターネットGW -> インターネットGWの作成
名前:ec2-test-igw
作成
リストでec2-test-igwを選択 -> アクション -> VPCにアタッチ -> ec2-test VPCを選択 -> アタッチ
NAT-GWの作成
プライベートサブネット上のインスタンスはそのままではインターネット通信ができない.
今回はプライベートサブネットからyum installのために行きのみのインターネット通信を行いたいので,NAT-GWを使う.
NAT-GWはインターネット接続させたいプライベートサブネットがあるAZのパブリックサブネットにそれぞれ設置する.
NAT-GWにはElastic IPが必要なので,NAT-GWの作成画面でElastic IPも作成し,割り当ててやる.
NAT-GWでは少量ながら時間ごとに課金されるので不要になったら削除すること
0.062USD / hour + 0.062USD / GB と,結構お高め
AWSでの操作
VPCサービスの画面 -> NATゲートウェイ -> NATゲートウェイの作成
AZ c用とAZ d用に2つ作成する
サブネット:ec2-test1, ec2-test3 (パブリックサブネットに設置する.AZの対応を間違わないようにする.)
新しいEIPの作成をクリック:新しいElastic IPが作成され,このNATに割り当てられる.
名前をそれぞれ,ec2-test-azc-nat, ec2-test-azd-natとつける
ルートテーブルの作成とサブネットへの関連付け
パブリックサブネット用のルートテーブル1つとプライベートサブネット用のルートテーブル2つを作成する
table: route tables
名前 ルートの送信先 ルートのターゲット 用途
ec2-test-public-rt 0.0.0.0/0 igw-xxxxxx (ec2-test-igw) インターネットと双方向通信
ec2-test-private-azc-rt 10.0.0.0/26 local public subnetに置いたWebサーバと通信
0.0.0.0/0 nat-xxxxxx (ec2-test-azc-nat) インターネットに往路接続
ec2-test-private-azd-rt 10.0.0.0/26 local public subnetに置いたWebサーバと通信
0.0.0.0/0 nat-xxxxxx (ec2-test-azc-nat) インターネットに往路接続
名前が空白のところは直上と同じことを意味する.
AWSでの操作
VPCサービスのページ -> ルートテーブル
上記の表に従って3つのルーティングテーブルを作成
名前タグ:上記テーブルの「名前」
VPC:ec2-test
作成
ルートテーブルの編集
ec2-test-public-rtを選択 -> アクション -> ルートの編集
ルートを追加.送信先とターゲットを上記の表に従って設定する.
ルートの保存
サブネットとルートテーブルの関連付け
ルートテーブルを選択 -> アクション -> サブネットの関連付けの編集 で以下のように関連づける
ec2-test-public-rt:ec2-test1とec2-test3
ec2-test-private-azc:ec2-test2
ec2-test-private-azd:ec2-test4
セキュリティグループの作成
HTTP,MySQL,SSHをロードバランサ,パブリック/プライベートサブネット用にそれぞれ最低限解放する.
SSHを解放するのはあとで試験的に中に入りたいためであり,本番環境では解放しない.
table: security groups
名前 in/out タイプ ポート番号 ソース/送信先
ec2-test-elb-sg in HTTP 80 0.0.0.0/0
out HTTP 80 0.0.0.0/0
ec2-test-public-sg in SSH 22 0.0.0.0/0
in HTTP 80 0.0.0.0/0
out SSH 22 sg-xxxxxx (ec2-test-private-sg)
out MySQL/Aurola 3306 sg-xxxxxx (ec2-test-private-sg)
out HTTP 80 0.0.0.0/0
ec2-test-private-sg in SSH 22 sg-yyyyyy (ec2-test-public-sg)
in MySQL/Aurola 3306 sg-yyyyyy (ec2-test-public-sg)
out HTTP 80 0.0.0.0/0
名前が空白のところは直上と同じことを意味する.
ソースは来るアクセスを許可する対象を意味し,送信先は行きのアクセスを許可する対象を意味する.
ここで,0.0.0.0/0は任意のソース/送信先を示し,どこからの/どこへのアクセスも許可する. public/privateでHTTPのアウトバウンドを設定しているのは,yum installのため.終わったら削除して良い.
AWSでの操作
VPCサービスのページ -> セキュリティグループ
上記の表に従って3つのセキュリティグループを作成
名前:上記テーブルの「名前」
説明(必須):A security group for (elastic load balancer / public subnets / private subnets)
VPC:ec2-test
上記の表に従い,インバウンド(in),アウトバウンド(out)のタイプとソース/送信先を設定する
セキュリティグループの作成
EC2インスタンスの起動
4つのサブネットでそれぞれlinuxサーバを立ち上げる.
1つのAZで2つのサブネットと2つのEC2インスタンスを立ち上げるが,まず一つ作って,AMIにしてあとで複製しても良い.
パブリックサブネットでEC2インスタンスを起動すると,自動でプライベートIPとパブリック IP (グローバル IP)の対応となるStatic NAT がインターネットGW に設定される.例えば ,DHCP の払い出し IP が 10.0.0.4 で、パブリック IP の払い出しが 20.30.40.50 だった場合は 20.30.40.50 -> 10.0.0.4 の NAT 変換設定が自動でインターネットGWに組み込まれる.
AWSでの操作
EC2サービスのページ -> インスタンス -> 以下の手順で4つのEC2インスタンスを作成する
インスタンスの作成
「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択し「次へ」
「t2.micro」を選択し「次へ」
インスタンス詳細の設定
ネットワーク:ec2-test
サブネット:ec2-testX (X=1~4)
自動割り当てパブリック IP:有効 (こうしないとあとでSSH接続とかができない)
次のステップ(ストレージサイズ) -> 次のステップ(タグ) -> 次のステップ
既存のセキュリティグループを選択
X=1, 3ならec2-test-public-sg
X=2. 4ならec2-test-private-sg
次のステップ -> 起動
キーペアの設定
最初の1回目:新しいキーペアの作成 -> 名前:ec2-test -> キーペアのダウンロード
2回目以降:既存のキーペアを選択 -> ec2-testを選択 -> チェック
※ 実際の環境ではキーペアは使いまわさない
インスタンスの作成
名前をec2-testX (X=1~4)にしておく
ストレージサイズに応じたボリュームが同時に作成される.
パブリックサブネットのインスタンスにPHP7.2とApache2.4を導入
AWSでの操作
以下の操作をec2-test1, ec2-test3で実行する.
パブリックサブネットのインスタンスにローカルから接続する
sshを導入しておく
ダウンロードしたec2-test.pemを$ chmod 400 ec2-test.pemする
ec2-test.pemをローカルの.sshに移動
接続したいインスタンスをインスタンスリストから選択
IPv4パブリックIPをコピー
ローカルで$ ssh -i ~/.ssh/ec2-test.pem ec2-user@xxx.xxx.xxx.xxx(コピーしたパブリックIP)を実行
初回接続は「未知の接続だけど続ける?」と聞かれるのでyes
インターネットに繋がってるか(アウトバウンドのHTTPが有効か)を確認するには,適当にhttpでcurlすれば良い
PHP7.2を導入する
$ sudo yum update -y
$ sudo yum install -y php72 php72-devel php72-fpm php72-gd php72-mbstring php72-mysqlnd php72-pdo php72-xml php72-json
$ php -v
Apache2.4 (httpd24)を導入する
$ sudo yum install -y httpd24 # PHPと一緒に導入されるっぽい
$ httpd -v
環境設定を行う
$ sudo vi /etc/httpd/conf/httpd.conf
code: /etc/httpd/conf/httpd.conf
-「Forbidden」ページからOS,IP,Apacheなどの情報を非表示にする
ServerTokens Prod
ServerSignature Off
<Directory "/var/www/html">
- ディレクトリ構造を表示しない
# Options Indexes FollowSymLinks
- htaccessを有効にする
AllowOverride All
</Directory>
$ sudo httpd -t # 設定ファイルの文法チェック
$ sudo service httpd start # Apacheサービス開始
$ sudo chkconfig httpd on # Apacheが起動のたびにサービス開始するようにする
$ sudo chown -R ec2-user /var/www # 再帰的にwww以下すべてのファイルの所有権をec2-userにする
$ sudo chmod 755 /var/www # /var/wwwを所有者のみが書き込みできるよう設定
PHPファイルを作成
code: /var/www/html/index.php
<html>
<body>
Hello World! <br>
<?php echo 'hoge'; ?>
</body>
</html>
わかりやすいように2つ目はhoge -> fugaとかにしておくといいかも
このインスタンスのパブリックIPにアクセスしたら上記のindex.phpの内容が表示される.
プライベートサブネットのインスタンスにMySQL5.7を導入
プライベートサブネットのインスタンスに入ってMySQLをインストールしたいが,外部からSSHアクセスすることはできない.
なので,一度パブリックのインスタンスにSSHで入ってから,さらにSSHでプライベートのインスタンスに入る.
そのためにec2-test.pemをscpでパブリックサブネットのインスタンスに送信する
AWSでの操作
ローカルからec2-test.pemをパブリックサブネットのインスタンスに送信
$ scp -i ~/.ssh/ec2-test.pem ~/.ssh/ec2-test.pem ec2-user@xxx.xxx.xxx.xxx:~/.ssh/
xxx.xxx.xxx.xxxはec2-test1, 3のパブリックIP
ec2-test1, 3にSSHで入る
さらにec2-test2, 4にSSHで入る
$ chmod 400 ~/.ssh/ec2-test.pem
$ ssh -i ~/.ssh/ec2-test.pem ec2-user@yyy.yyy.yyy.yyy
yyy.yyy.yyy.yyyはec2-test2. 4のプライベートIP
VPC内接続はルートテーブルのTarget=localで許可されている
MySQL5.7を導入する
$ sudo yum update -y
$ sudo yum install -y mysql57-server
$ mysql -v
$ sudo service mysqld start
$ mysql_secure_installation
パスワードを作成
リモートユーザからのrootログインを無効にするか?だけは,Enterを押してNo
$ mysql -u root -p
先ほど入力したパスワードを入力し,起動できたら以下を実行
code: create test database.sql
create database test;
use test;
create table;
create table user (id int, name varchar(10));
insert into user values (1, "fuurin"); # こちらは1つめのDBで実行
# insert into user values (2, "noimin"); # こちらはもう1つのDBで実行
select * from user;
# 全てのDBの全てのテーブルへの全てのホストからのアクセスを許可.
# ネットワークでアクセスは制御してるし大丈夫っしょ
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit
$ exit
PHPからMySQLに接続できるかを確認するためファイルを編集
code: /var/www/html/index.php
<html>
<body>
Hello World! <br>
<?php echo 'hoge<br>'; ?>
<?php
$host = '同じAZのプライベートサブネットにあるインスタンスのプライベートIP'
$dsn = "mysql:dbname=test;host={$host}:3306";
$user = 'root';
$password = 'password';
try {
$dbh = new PDO($dsn, $user, $password);
echo 'Connection Success <br>';
$sql = 'select * from user';
foreach ($dbh->query($sql) as $row) {
}
} catch (PDOException $e) {
echo 'Error: '.$e->getMessage();
die();
}
$dbh = null;
?>
</body>
</html>
このインスタンスのパブリックIPにアクセスしたら上記のindex.phpの内容が表示される.
ロードバランサの作成
ロードバランサで外部からのアクセスをec2-test1とec2-test3に分散する.
作成と同時に,ロードバランサで扱うインスタンスが登録されたリストであるターゲットグループが作成される.
なお,パブリックサブネットのルートテーブルやセキュリティグループをロードバランサへ向ける必要はない.
ロードバランサはターゲットグループへのアクセスバランスを制御するが,ルーティングを変えることはしない.
AWSでの操作
EC2サービスの画面 -> ロードバランサ -> ロードバランサを作成
Application Load Balancerを選択
名前:ec2-test-elb
ロードバランサのプロトコル:HTTPのまま
アベイラビリティゾーン
ap-northeast-1c, ap-northeast-1dの両方にチェック
1cではec2-test1,1dではec2-test3のサブネットを選択
次の手順 -> 次の手順
既存のセキュリティグループを選択する -> ec2-test-elb-sgを選択 -> 次の手順
名前にec2-test-elb-tgと入れ,次の手順
ec2-test1,ec2-test3を選択し,登録済みに追加,確認,作成
同時にec2-test1, ec2-test3が登録されたターゲットグループが作られる.
azcかazdのどちらかのサーバのパブリックサブネットのインスタンスからの結果が表示される.
更新ボタンを長押ししてめっちゃアクセスしまくればもう片方のサーバの方の結果が見られる.
公開するときはさらにElastic IPと結びつけて,さらにドメイン名と結びつける.
これで完成.
上記で作成した全てを削除
なるべく課金されないようにとっとと全て削除する.
AWSでの作業
上記の作業では次のものが作成された.
table: createds
オブジェクト 数 削除順
EC2インスタンス 4 1
ボリューム 4
ロードバランサー 1 2
ターゲットグループ 1 3
NAT GW 2 4
Elastic IP 2 5
サブネット 4 6
VPC 1 7
ルートテーブル 3
セキュリティグループ 3
ネットワークACL 1
インターネットGW 1
DHCPオプションセット 1 8
キーペア 1 とっといても良い
今回の実習でかかったお金は30円くらい
https://gyazo.com/9e23a417b936cb6e814ae070db6c3890
EBSはElastic Block Storagevolumeで,これは結構高いかも.気をつけよう.
VPCウィザードを使ってVPCを構成する
上記のVPC作成にあたっての手順を簡潔にしてくれるのがVPCウィザード.
VPCサービスの画面 -> VPCダッシュボード -> VPCウィザードを起動
基本的には以下の2つくらいしか使わないだろう
1 個のパブリックサブネットを持つ VPC
基本的には次の項目を記入
VPC
CIDR
名前
パブリックサブネット
CIDR
AZ
名前
サービスエンドポイント
dynamoDBかS3しか選べないみたい
次のものが作成される
VPC
(パブリック)サブネット
インターネット GW
ルートテーブル:target=localのみと,target=igwもあるやつの2つが作成される.
サブネットにはigwの方がアタッチされている
セキュリティグループ:全開け
ネットワーク ACL
DCHPオプションセット
VPCを削除すればDHCPオプションセット以外は全て消える.
ここで作成されたパブリックサブネットはもうネットに繋げるため,サブネットにEC2を立ててすぐ通信できる.
パブリックとプライベート サブネットを持つ VPC
こちらはNAT GWを自動で作成するため,割り当てるためのElastic IPをあらかじめ取得しておく
基本的には次の項目を記入
VPC
CIDR
名前
パブリックサブネット + プライベートサブネット
CIDR
AZ
名前
プライベートサブネットがつかうNAT GWのElastic IP
サービスエンドポイント
dynamoDBかS3しか選べないみたい
次のものが作成される
VPC
パブリックサブネット,プライベートサブネット
インターネット GW
NAT GW
ルートテーブル:target=localに加えtarget=igw,target=natがそれぞれ設定される2つが作成される.
パブリックサブネットにはigwのがアタッチされている
プライベートサブネットにはnatのがアタッチされている
セキュリティグループ:全開け
ネットワーク ACL
DCHPオプションセット
ここで作成されたパブリックサブネットはもうネットに繋げるため,サブネットにEC2を立ててすぐ通信できる.
ここで作成されたプライベートサブネットは行きのネットへの通信ができ,サブネットにEC2を立ててすぐ通信できる.
NATを削除 -> Elastic IPを解放 -> サブネットを削除 -> VPCを削除 でDCHPオプションセット以外は消える
EC2インスタンスをすぐ立てる
アカウント作成時にはデフォルトのVPC+パブリックサブネットが用意されていたからか,EC2はすぐに立ち上げられた気がする.VPCまたはサブネットがなければインスタンス作成ウィザードの新しく作るボタンから自分で作る必要がある.
Next Step
インスタンスの立ち上げとキーの再設定
Apacheの導入
NginXの導入
note.js, yarnの導入
SSL証明書の作成
Open SSL(オレオレ証明書)
Let's Encrypt